/**
 * 思路：首先，id 与 pid 是相互映射对应的，比如 a.id === b.pid，那么代表 b 为 a 的子级，
 * 从属关系讲清楚了我们来说解决方法，遍历整个数组，遍历时找当前元素的 pid 对应的子级元素，
 * 放入到 children 属性中，下一个元素亦是如此，直到整个数组遍历完毕，你会发现，所有子级元素
 * 处理完毕！！！
 */

function fromatDataTree1(data) {
  // 为了不改变原数组，我们深拷贝一下
  const _newArr = JSON.parse(JSON.stringify(data));
  const _len = _newArr.length;

  return _newArr.filter((item) => {
    for (let j = 0; j < _len; j++) {
      let parent = item;
      let children = _newArr[j];
      if (parent.id === children.pid) {
        if (parent.children) {
          // 属性存在
          parent.children.push(children);
        } else {
          parent.children = [children];
        }
      }
    }
    return item.pid == 0;
  });
}


const arr1 = fromatDataTree1(data);
console.log(data);
console.log(arr1);